import { ElMessage } from "element-plus";

/**
 * 内部：解析容器
 * @param {String|Element} container
 * @returns {Element|null}
 */
function resolveContainer(container) {
  if (!container) return null;
  if (typeof container === "string") return document.querySelector(container);
  if (container instanceof Element) return container;
  return null;
}

/**
 * Message 消息提示
 * @param {String} type 消息类型 primary、success、 warning、info、error
 * @param {String} message 消息内容
 * @param {Object} options 配置项
 * @returns {Object} 返回一个 Message 实例
 */
export const baseMessage = (type, message, options = {}) => {
  if (options.container) options.container = resolveContainer(options.container);
  return ElMessage({
    type,
    message,
    appendTo: options.container || document.body,
    duration: options.duration ?? 2000,
    customClass: options.container instanceof Element ? "toast-part" : "toast-global", // 你的自定义 class 默认全局 class
    ...options,
  });
};

/**
 * 全局 Message
 * @param {String} type 消息类型 primary、success、 warning、info、error
 * @param {String} message 消息内容
 * @param {Object} options 配置项
 * @returns {Object} 返回一个 Message 实例
 */
export const $msg = {
  open: (type, msg, options) => baseMessage(type, msg, options),
  primary: (msg, options) => baseMessage("primary", msg, options),
  success: (msg, options) => baseMessage("success", msg, options),
  error: (msg, options) => baseMessage("error", msg, options),
  warning: (msg, options) => baseMessage("warning", msg, options),
  info: (msg, options) => baseMessage("info", msg, options),
};

/**
 * 作为插件全局挂载
 * @param {Object} app Vue 应用实例
 * @returns {void}
 */
export default {
  install(app) {
    // 挂载到 Vue 实例
    app.config.globalProperties.$msg = $msg;
    // 可选：挂到 window 方便在非组件场景快速用
    if (typeof window !== "undefined") {
      window.$msg = $msg;
    }
  },
};
